/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package formularze;

import bazy.HibernateUtil;
import bazy.Statusy;
import bazy.Uzytkownicy;
import bazy.Zalaczniki;
import bazy.Zamowienia;
import bazy.ZgloszeniaAwarii;
import java.util.ArrayList;
import java.util.Date;
import java.util.Iterator;
import org.hibernate.Session;

/**
 * Klasa do oblusgi zgłoszeń awarii.
 * @author Grzesiek
 */
public class Zgl_aw extends Formularz {

    /**
     * usunięcie formularza z bazy.
     * @param id
     */
    @Override
    public void usun(int id) {
        Session session = HibernateUtil.getSessionFactory().openSession();
        Zamowienia zam = (Zamowienia) session.load(Zamowienia.class, id);
        org.hibernate.Transaction tx = session.beginTransaction();

        Iterator<Zalaczniki> zalacz_iter = zam.getZalacznikis().iterator();
        while (zalacz_iter.hasNext()) {
            session.delete(zalacz_iter.next());

        }

        session.delete(zam.getZgloszeniaAwariis().iterator().next());
        session.delete(zam);
        tx.commit();
        session.close();
    }

    /**
     * Dodanie nowego zgłoszenia do bazy, bądz edycja już istniejącego.
     *  W przypadku, gdy dodajemy nowe zgłoszenie, jako parametr id_zam podajemy 0.
     * @param id_zam
     * @param id_user
     * @param komentarz
     * @param zrodlo
     * @param uwagi
     * @param nazwa
     * @param typ
     * @param numer
     * @param opis
     * @param nr_gwaracnji
     * @param gwarancja
     * @param zalacznikiList
     */
    public void dodaj(int id_zam, int id_user, String komentarz, String zrodlo, String uwagi, String nazwa, String typ, String numer, String opis, String nr_gwaracnji, boolean gwarancja, ArrayList<Zalaczniki> zalacznikiList) {
        Session session = HibernateUtil.getSessionFactory().openSession();
        org.hibernate.Transaction tx = session.beginTransaction();
        Statusy pom_stat = (Statusy) session.load(Statusy.class, 1);
        Uzytkownicy pom_uz = (Uzytkownicy) session.load(Uzytkownicy.class, id_user);
        Zamowienia pom_zam = null;
        ZgloszeniaAwarii pom_zglo = null;

        if (id_zam == 0) {
            pom_zam = new Zamowienia(pom_stat, pom_uz, "Zgloszenie awarii", new Date(), komentarz, zrodlo, uwagi, null, null, null, null, null, null);
            session.save(pom_zam);
            pom_zglo = new ZgloszeniaAwarii(pom_zam, nazwa, typ, numer, opis, nr_gwaracnji, gwarancja);
            session.save(pom_zglo);
        } else {
            pom_zam = (Zamowienia) session.load(Zamowienia.class, id_zam);
            pom_zam.setKomentarz(komentarz);
            pom_zam.setZrodlofinansowania(zrodlo);
            pom_zam.setUwagidorealizacji(uwagi);
            session.update(pom_zam);
            pom_zglo = pom_zam.getZgloszeniaAwariis().iterator().next();
            pom_zglo.setNazwa(nazwa);
            pom_zglo.setNaprawaGwarancyjna(gwarancja);
            pom_zglo.setNumerGwarancji(nr_gwaracnji);
            pom_zglo.setNumerInwentarzowy(numer);
            pom_zglo.setTyp(typ);
            pom_zglo.setTyp(opis);
            session.update(pom_zglo);

        }


        for (int i = 0; i < zalacznikiList.size(); i++) {
            zalacznikiList.get(i).setZamowienia(pom_zam);
            if (zalacznikiList.get(i).getIdzalaczniki() == null) {
                if (zalacznikiList.get(i).getNazwa().equals("")) {
                    continue;
                }
                session.save(zalacznikiList.get(i));

            } else {
                session.update(zalacznikiList.get(i));

            }
        }

        tx.commit();
        session.close();
    }
}
